#include <sys/types.h>
#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
  regex_t p;
  regmatch_t pm[2];
  regoff_t last_match = 0;         // indeks, od ktorego szukamy w lancuchu
  char *s = "v0.1 v0.2 v1.0 v1.1"; // lancuch, w ktorym szukamy dopasowan
  char buf[10];                    // pomocniczy lancuch - tylko do wydruku
  
  // Kompilacja wyrazenia regularnego
  regcomp(&p, "\\.[01]", 0);

  // Wyszukiwanie wszystkich podlancuchow pasujacych do wzorca  
  while (regexec(&p, s+last_match, 2, pm, 0) == 0) {
    // pm[0].rm_so - offset poczatku dopasowania
    // pm[0].rm_eo - offset nastepnego znaku po dopasowaniu
  
    printf("Przeszukuje \"%s\" ", s+last_match);    
    memcpy(buf, &s[last_match+pm[0].rm_so], pm[0].rm_eo - pm[0].rm_so);
    buf[ pm[0].rm_eo - pm[0].rm_so ] = '\0';
    printf("i znajduje \"%s\" ", buf);
    printf("od %d ", pm[0].rm_so);
    printf("do %d \n", pm[0].rm_eo);

    printf(" w lancuchu \"%s\" ", s);
    printf("wybieram znaki <%d", pm[0].rm_so + last_match);
    printf(", %d) ", pm[0].rm_eo + last_match);
    memcpy(buf, &s[pm[0].rm_so + last_match], pm[0].rm_eo - pm[0].rm_so);
    buf[ pm[0].rm_eo - pm[0].rm_so ] = '\0';
    printf("z dopasowaniem \"%s\"\n", buf);
    
    // ustawienie, od ktorego indeksu szukamy
    last_match += pm[0].rm_so + 1; 
  }
  
  regfree(&p);
  return 0;
}